home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / edit / aaem95ma.zip / MAIN.CC < prev    next >
C/C++ Source or Header  |  1995-02-27  |  17KB  |  339 lines

  1. /* This file is MAIN.CC */
  2. #include "em.h"
  3. //FILE*debug;
  4. int gethex(int&i,char*&f){char c; int j=0,k=0,s=1;
  5. while((c=*f++)==' '?:c=='\t'); if(c=='-') {s=-1; c=*f++;}
  6. A: if(c>='0') if(c<='9') {j=j*16+c-'0'; c=*f++; k++; goto A;}
  7. if(c>='A') if(c<='F') {j=j*16+c+10-'A'; c=*f++; k++; goto A;}
  8. if(c>='a') if(c<='f') {j=j*16+c+10-'a'; c=*f++; k++; goto A;} i=j*s; return k;}
  9. /*-----*/
  10. char DIR[64],helpfile[128],bighelpfile[128],infofile[128],*dictname=0;
  11. char *altnames[256],*altshortnames[256]; val keynames[13]; char rept;
  12. macrinfo basemi,*mi=&basemi; int nscreenmodes,oldmx,oldmy;
  13. uns char*graphicalscreen=(uns char*)0xd0000000; /**** this addr only in Gnu C */
  14. /*-----*//* remove null args */
  15. static void dustman(int&n,char**arg){reg i,j; reg char*s;
  16. for(i=j=0;i<n;i++) if(s=arg[i]) arg[j++]=s; n=j;}
  17. /*-----*/
  18. char getchar(){int i; A: i=get_key(); if(i<0) goto A; return i;}
  19. /*-----*/
  20. void gets(char*s){int i; char*t=s;
  21. A: i=get_key(); if(i<0) goto A; *t++=i; if(i!='\n') goto A; t[-1]=0;}
  22. /*-----*/
  23. void myhandler(){MOAN("out of store");}
  24. /*-----*/
  25. void*myalloc(int i){void*x=malloc(i); if(!x) myhandler();}
  26. /*-----*/
  27. main(int nargs,char**Arg){uns short dustbin[256]; Subr*S; char*s,**info=0;
  28. byte c,c1,c2; int b=0,d,prevc,i,j,k,l,m,n,q=0,r,u,v,w,x,y,z; jmp_buf emacserror;
  29. buffer*C=0; line*L; char *T,**arg; mark M,*P; int N,D=0; /* if D!=0,N==repeat */
  30. Jerry.range(2048,2048); Jerry.mc=0;
  31. arg=(char**)myalloc(nargs*sizeof(char*)); for(i=0;i<nargs;i++) arg[i]=Arg[i];
  32. if(nargs>1) if(!strcmp(arg[1],"/help")) {
  33.     ps("in AAEMACS, type 'ctrl-_ ?' to find how to get help.\n"); exit(0);}
  34. gp_Cols=ScreenCols(); gp_Rows=ScreenRows(); clock();
  35. /* gp_Cols=*(uns short*)0xe000044a; gp_Rows=*(byte*)0xe0000484+1; */
  36. /**** These 2 addresses are specific for Gnu C's virtual store system:- ****/
  37. subrname[0].menuc=subrname[0].menur=0; i=0;
  38. keynames[i++]=val("null",0);
  39. keynames[i++]=val("tab",'I'-64);
  40. keynames[i++]=val("ret",CR);
  41. keynames[i++]=val("esc",'['-64);
  42. keynames[i++]=val("space",' ');
  43. keynames[i++]=val("ctrlleftsqbrkt",'['-64);
  44. keynames[i++]=val("ctrlbackslash",'\\'-64);
  45. keynames[i++]=val("ctrlrightsqbrkt",']'-64);
  46. keynames[i++]=val("ctrlcircumflex",'^'-64);
  47. keynames[i++]=val("ctrlunderline",'_'-64);
  48. keynames[i++]=val("char127",127);
  49. keynames[i++]=val("char255",255);
  50. keynames[i++]=val(0,0);
  51. for(i=0;S=&subrname[i],s=S[0].name;i++) {n=S[0].n=strlen(s);
  52.     S[1].menur=S[0].menur; j=S[1].menuc=S[0].menuc+n+1;
  53.     if(j>gp_Cols) {S[0].menur++; S[0].menuc=0; i--;}}
  54. for(i=0;i<255;i++) {to__upper[i]=to__lower[i]=i; chtype[i]=0;}
  55. for(i='a';i<='z';i++) {to__upper[i]-=32; chtype[i]|=c_alpha|c_alnum;}
  56. for(i='A';i<='Z';i++) {to__lower[i]+=32; chtype[i]|=c_alpha|c_alnum;}
  57. for(i='0';i<='9';i++) chtype[i]|=c_alnum; chtype['_']|=c_alnum;
  58. chtype[' ']|=c_white; chtype[9]|=c_white; chtype[LF]|=c_white;
  59. set_new_handler(&out_of_store); Moan=Display=0;
  60. lastyank=region(); Found=region(); for(i=0;i<16;i++) killring[i]=Text();
  61. if(T=getenv("AAEMACS")) {strcpy(DIR,T); goto DIR_FOUND;}
  62. wr("parameter AAEMACS not set in AUTOEXEC.BAT\n");
  63. if(nargs>0) {strcpy(DIR,arg[0]); n=strlen(DIR);
  64.     for(i=0;i<n;i++) DIR[i]=DIR[i]=='/'?'\\':to__upper[DIR[i]&255];
  65.     if(!strcmp(DIR,"EMACS")) goto ASK_FOR_DIR;
  66.     if(n>=6) if(!strcmp(DIR+n-6,"\\EMACS")) {DIR[n-6]=0;
  67.     pr(CW,"is your AAEMACS on directory '%s'?",DIR);
  68.     if(Yesno(CW)) goto DIR_FOUND;}}
  69. ASK_FOR_DIR: wr("what directory is your AAEMACS on?"); gets(DIR);
  70. DIR_FOUND: pr(helpfile,"%s\\"HELPFILE,DIR); n=strlen(DIR);
  71. for(i=0;i<n;i++) DIR[i]=DIR[i]=='/'?'\\':to__upper[DIR[i]&255];
  72. pr(bighelpfile,"%s\\"BIGHELPFILE,DIR); pr(infofile,"%s\\INFO.DAT",DIR);
  73. if(!(info=readtext(infofile))) {ps("I can't open file %s\n",infofile); exit(1);}
  74. m=gp_mode(); asm("movl _graphicalscreen,%edx"); asm("addl $44,%edx");
  75. asm("movb $16,(%edx)"); asm("movzbl (%edx),%esi"); asm("movl %esi,__ax");
  76. /* graphicalscreen[44]=16; _ax=graphicalscreen[44]; this'll fox the optimizer */
  77. if(_ax==16 ?: ScreenCols()<80 ?: ScreenRows()<20) {
  78. /* if(outportb(0x3c0,0x10),inportb(0x3c1)&3 /* eliminate mono & graphic */
  79.     ps("this screen mode (%1x hex) is not suitable for AAEMACS\n",m); exit(1);}
  80. if(ScreenCols()<80) {ps("this screen mode (%1x hex) has < 80 chars/line,\
  81.  so is not suitable for AAEMACS\n",m); exit(1);}
  82. pr(CW,"%s\\"DICTFILE,DIR); dictname=copyof(CW);
  83. for(i=0;i<strsize;i++) CW[i]=0;
  84. KEYNAMES: for(i=0;i<256;i++) altnames[i]=altshortnames[i]=0;
  85. for(j=0;s=info[j];j++) {w=strlen(s); if(w) if(s[w-1]==LF) s[--w]=0;
  86.     i=atoi(s); for(k=0;k<w;k++) if(s[k]==' ') s[k]=0;
  87.     if(!s[4]?1:!s[21]) {ps("bad line in %s\n",infofile); exit(1);}
  88.     i&=255; altnames[i]=copyof(s+4); altshortnames[i]=copyof(s+21);}
  89. delete info[0]; delete info; info=0;
  90. bad=&emacserror; if(setjmp(*bad)){
  91.     clearscreen(); ps("\n%s\n",Moan?:"AAEMACS aborted"); exit(1);}
  92. clearscreen(); line0=new line(); line0->next=line0; thisstep.f=kf(&_idle);
  93. B=buf0=new buffer(); B->initbuffer(); laststep.f=kf(&_idle);
  94. B->row1=0; B->nrows=gp_Rows; B->ncols=gp_Cols; B->lastrow=B->row1+B->nrows-1;
  95. for(i=0;i<256;i++) {Sl[i].lp=Sl[i].nlp=0;
  96.     Sl[i].buf=B; Sl[i].l=line0; Sl[i].ok=0; Sl[i].sa=dustbin;}
  97. for(i=0;i<gp_Rows;i++) Sl[i].sa=screen+i*gp_Cols; /* screen address of line */
  98. /* bind the keys:- (printing chars are unbound and unbindable) */
  99. keys.subarray(); keys[0].subarray();
  100. keys[0][alt_0]=alt0;keys[0][alt_1]=alt1;keys[0][alt_2]=alt2;keys[0][alt_3]=alt3;
  101. keys[0][alt_4]=alt4;keys[0][alt_5]=alt5;keys[0][alt_6]=alt6;keys[0][alt_7]=alt7;
  102. keys[0][alt_8]=alt8;keys[0][alt_9]=alt9;keys[0][alt_minus]=altminus;
  103. keys[0][alt_A]=skipsentb;
  104. keys[0][alt_B]=skipwordb;
  105. keys[0][alt_C]=capitalize;
  106. keys[0][alt_D]=killwordf;
  107. keys[0][alt_E]=skipsentf;
  108. keys[0][alt_F]=skipwordf;
  109. keys[0][alt_G]=gotoline;
  110. keys[0][alt_H]=killwordb;
  111. keys[0][alt_I]=checkspelling;
  112. keys[0][alt_J]=finalcr;
  113. keys[0][alt_K]=killsent;
  114. keys[0][alt_L]=lwcasewords;
  115. keys[0][alt_M]=modemenu;
  116. keys[0][alt_N]=skipparaf;
  117. keys[0][alt_O]=gotodir;
  118. keys[0][alt_P]=skipparab;
  119. keys[0][alt_Q]=formatpara;
  120. keys[0][alt_R]=repl;
  121. keys[0][alt_S]=replask;
  122. keys[0][alt_T]=twiddlewords;
  123. keys[0][alt_U]=upcasewords;
  124. keys[0][alt_V]=page_up;
  125. keys[0][alt_W]=copykill;
  126. keys[0][alt_X]=callsubr;
  127. keys[0][alt_Y]=replyank;
  128. keys[0][alt_Z]=showregion;
  129. keys[0][pageup]=page_up;                keys[0][pagedown]=page_down;
  130. keys[0][home]=gotobof;                  keys[0][end]=gotoeof;
  131. keys[0][del]=delet;                     keys[0][ins]=insertspaces;
  132. keys[0][leftarrow]=goleft;              keys[0][rightarrow]=goright;
  133. keys[0][uparrow]=goup;                  keys[0][downarrow]=godown;
  134. keys[0][ctrl_uparrow]=gouppart;         keys[0][ctrl_downarrow]=godownpart;
  135. keys[0][alt_home]=markbof;              keys[0][alt_end]=markeof;
  136. keys[0][alt_downarrow]=skipsentf;       keys[0][alt_uparrow]=skipsentb;
  137. keys[0][alt_leftarrow]=skipwordb;       keys[0][alt_rightarrow]=skipwordf;
  138. keys[0][alt_del]=killwordf;             keys[0][alt_bksp]=killwordb;
  139. keys[0][alt_insert]=openline;           keys[0][alt_equals]=menu;
  140. keys[0][mbutton]=menu;                  keys[0][rbutton]=menu;
  141. keys[0][lbutton]=mouse_mode;            keys[0][ctrl_2]=cbrackets;
  142. keys[0][mbuttond]=_idle;                keys[0][rbuttond]=_idle;
  143. keys[0][lbuttond]=setolddot;            keys[0][mousemove]=mouse_move;
  144. keys[0][alt_sharp]=macromenu;
  145. keys['A'-64]=gotobol;
  146. keys['B'-64]=goleft;
  147. keys['D'-64]=delet;
  148. keys['E'-64]=gotoeol;
  149. keys['F'-64]=goright;
  150. keys['G'-64]=whoa;
  151. keys['H'-64]=backspace;
  152. keys['I'-64]=tabulate;
  153. keys['J'-64]=newline;
  154. keys['K'-64]=kill_to_eol;
  155. keys['L'-64]=refresh_display;
  156. keys['M'-64]=newline;
  157. keys['N'-64]=godown;
  158. keys['O'-64]=openline;
  159. keys['P'-64]=goup;
  160. keys['Q'-64]=literalchar;
  161. keys['R'-64]=findb;
  162. keys['S'-64]=findf;
  163. keys['T'-64]=twiddle;
  164. keys['U'-64]=times4;
  165. keys['V'-64]=page_down;
  166. keys['W'-64]=killregion;
  167. keys['X'-64].subarray(); keys['X'-64][0].subarray();
  168. keys['X'-64]['B'-64]=buffermenu;
  169. keys['X'-64]['D'-64]=cstrchr;
  170. keys['X'-64]['E'-64]=calldos;
  171. keys['X'-64]['F'-64]=openfile;
  172. keys['X'-64]['I'-64]=insertfile;
  173. keys['X'-64]['L'-64]=lwcaseregion;
  174. keys['X'-64]['O'-64]=delblanklines;
  175. keys['X'-64]['Q'-64]=formatinsetregion;
  176. keys['X'-64]['S'-64]=savebuffer;
  177. keys['X'-64]['T'-64]=expandtabs;
  178. keys['X'-64]['U'-64]=upcaseregion;
  179. keys['X'-64]['W'-64]=writebuffer;
  180. keys['X'-64]['X'-64]=swopmark;
  181. keys['X'-64]['Y'-64]=maketabs;
  182. keys['X'-64]['Z'-64]=finish;
  183. keys['X'-64]['(']=beginmacro;
  184. keys['X'-64][')']=endmacro;
  185. keys['X'-64]['=']=showinfo;
  186. keys['X'-64]['1']=onewindow;
  187. keys['X'-64]['2']=splitwindow;
  188. keys['X'-64]['D']=cchrstr;
  189. keys['X'-64]['E']=obey;
  190. keys['X'-64]['F']=setrightmargin;
  191. keys['X'-64]['N']=renamebuffer;
  192. keys['X'-64]['R']=incrfindb;
  193. keys['X'-64]['S']=incrfindf;
  194. keys['X'-64]['X']=gotonbuf;
  195. keys['Y'-64]=yank;
  196. keys['Z'-64]=repeat;
  197. keys[esc].subarray(); keys[esc][0].subarray();
  198. keys[esc][0][alt_K]=bindkeybuf;
  199. keys[esc][0][alt_R]=replword;
  200. keys[esc][0][alt_S]=replwordask;
  201. keys[esc]['/']=leaveonewhite;
  202. keys[esc]['0']=esc0;keys[esc]['1']=esc1;keys[esc]['2']=esc2;keys[esc]['3']=esc3;
  203. keys[esc]['4']=esc4;keys[esc]['5']=esc5;keys[esc]['6']=esc6;keys[esc]['7']=esc7;
  204. keys[esc]['8']=esc8;keys[esc]['9']=esc9;keys[esc]['-']=escminus;
  205. keys[esc]['F'-64]=restorebuf;
  206. keys[esc]['K'-64]=unbindkey;
  207. keys[esc]['N'-64]=namemacro;
  208. keys[esc]['R'-64]=findwordb;
  209. keys[esc]['S'-64]=findwordf;
  210. keys[esc][' ']=setmark; keys[esc]['.']=pushmark; keys[esc][',']=popmark;
  211. keys[esc]['#']=remmark;
  212. keys[esc]['C']=copytext;
  213. keys[esc]['G']=gotocol;
  214. keys[esc]['J']=nofinalcr;
  215. keys[esc]['K']=bindkeymacro;
  216. keys[esc]['M']=movetext;
  217. keys[esc]['N']=nextwindow;
  218. keys[esc]['P']=prevwindow;
  219. keys[esc]['Q']=formatregion;
  220. keys[esc]['T']=twiddlelines;
  221. keys[esc]['X']=displayhex;
  222. keys[esc]['\\']=deletewhite;
  223. keys['_'-64]=help;
  224. Jerry.setup(); Jerry.settrap(0x7f,&event); /* releases & movement */
  225. clearscreen(); T=nargs>=2?arg[1]:".";
  226. n=strlen(T); for(i=0;i<n;i++) if(T[i]=='['?:T[i]==']') {T="."; break;}
  227. /* attrib acts odd if there is a [ or ] in the filename */
  228. if(setjmp(*bad)) {mi=&basemi; thisstep.f=&_idle; goto LOOP;}
  229. fullfilename(Fn.s,T); Fn.n=strlen(Fn.s); i=attrib(Fn.s);
  230. if(i==3*256) { /* can't find directory, so give menu of current directory */
  231.     strcpy(CW,"."); fullfilename(Fn.s,CW); Fn.n=strlen(Fn.s); i=attrib(Fn.s);}
  232. if(i&16){findbuf(val("(no file)",9))->go_to();
  233.     window[0]=B; filefromdirmenu(Fn,"file:");}
  234. Macro=new macro(); Macro->name=CMN; basemi.prevstep=&laststep; /* so Macro!=0 */
  235. findbuf(Fn)->go_to(); laststep.f=kf(&_idle);
  236. window[0]=B; Moan="AAEMACS (version of "VERSION"): for help, type ctrl-_";
  237. set_new_handler(myhandler);
  238. LOOP: bad=&emacserror; if(!rept) laststep=thisstep;
  239. thisstep.clear(); macdepth=0; refreshscreen();
  240. Jerry.range(2048,2048); oldmy=1024;
  241. oldmx=B->longlines ? linewhere(B->dot)%gp_Cols : B->dot.r->to_tabexp(B->dot.c);
  242. Jerry.move(oldmy,oldmx); if(C!=B) B->olddot=B->dot; C=B; showmoan();
  243. gp_cursor(cursor); basemi.rec=1; T1t.s=T1w; T2t.s=T2w; Fn.s=Filename;
  244. B->dot2=B->dot1; B->dot1=B->dot; rept=0; Obey();
  245. if(!rept) if(basemi.rec) if(record) (*record)+=thisstep.copy(); goto LOOP;}
  246. /*-----*//* show displays and moans */
  247. void showmoan(){int j=B->lastrow; if(Display)display(Display,Moan?j-1:j,0,Cyan);
  248. Display=0; if(Moan) display(Moan,j,0,Red); Moan=0;}
  249. /*-----*/
  250. void(*cf[3])(int,byte)={&insert_,&overlay_,&nomove_};
  251. subr*cff[3]={&insert,&overlay,&nomove};
  252. /*-----*//* obey keysequence 'c,c2' (-1 == to be read). If D!=0, arg==N */
  253. void Obey(val N/*=val(1,0)*/){int c,i,j,k,l,m,n,w,z=1; val Key; line*L=B->dot.r;
  254. char*T=L->s,*C; keyarray *keytable,*kt[33]; prevobtype=obtype; obtype=ob_other;
  255. B->col.Reg=region(mark(0,0),mark(0,0)); c=getkey(); kt[1]=keytable=&keys;
  256. if(B->dotcc>=0) {B->dotcc2=B->dotcc; B->dotcc=-1;} thisstep.N=N;
  257. ARRAY: if(c<0) {keyseqc[z++]=0; keyseqc[z++]=-c; Key=(*keytable)[0][-c];}
  258. else {keyseqc[z++]=c; Key=(*keytable)[c];} keyseqc[0]=z;
  259. switch(Key.n){ /* = type of key binding. N.i==repeat count, usually */
  260. case _unbound: if(c>=32) if(z==2) {cf[B->overlay](int(N.i),c); /* character */
  261. /* auto newline:- */
  262.     if(B->wrap) if(L->to_tabexp(B->dot.c)>=B->rmargin-1) L->split_if_long();
  263.     thisstep.f=kf(cff[B->overlay]); thisstep.T1=char(c); break;}
  264.     C=keyseqc+keyseqc[0]; /* unbound esc letter treated as alt-letter:- */
  265.     if(C[-2]=='['-64) if(C[-3]) if(isalpha(j=to_upper(c))){
  266.     c=-esc_alt[j-'A']; keytable=kt[z-=2]; goto ARRAY;}
  267.     pr(CW,"%k not defined. For help type ctrl-_",&keyseq);basemi.rec=0;MOAN(CW);
  268. case _subr: thisstep.f=Key; Key.f(N,val(),val()); break;
  269. case _macro: thisstep.f=Key; if(N.n) thisstep.N=N; (*Key.m)(N); break;
  270. case _keyarray: pr(CW,"%k typed: more please",&keyseq);
  271.     display(CW,B->lastrow,0,Cyan); c=getkey(); B->redraw_info();
  272.     if(c>0) c=to_upper(c); kt[z]=keytable=Key.k; goto ARRAY;
  273. case _buffer: thisstep.f=kf(&buffer_);
  274.     thisstep.T1=copyof(Key.b->name?:"(no file)");
  275.     (*Key.b)(int(N.i)); break; default: break;} mi=&basemi;}
  276. /*-----*/
  277. int Yesno(char*s) {char c,d; do{ps("%s",s);
  278. c=d=getchar(); while(d!=LF) d=getchar();
  279. if(c=='Y'?1:c=='y') return 1; if(c=='N'?1:c=='n') return 0;
  280. ps("(answer 'y' or 'n') ");} while(1);}
  281. /*-----*/
  282. #define _(name,args) {&name,0,0,0,#name,args}
  283. #define __(name,Name,args) {&name,0,0,0,Name,args}
  284. /* initial _adinf == 'do not evaluate this func call at compile time' */
  285. short AS[]={_adinf,_string,0},
  286. A[]={_adinf,0,0},
  287. III[]={_int,_int,_int,0},
  288. II[]={_int,_int,0},
  289. IK[]={_int,_keyseq,0},
  290. IL[]={_int,_label,0},
  291. IMS[]={_int,_magic,_string,0},
  292. IM[]={_int,_magic,0},
  293. ISK[]={_int,_string,_keyseq,0},
  294. ISS[]={_int,_string,_string,0},
  295. IS[]={_int,_string,0},
  296. I[]={_int,0},
  297. IXA[]={_int,666,666,0},
  298. KCA[]={_keyseq,_char,_adinf}; /* allowed arg patterns */
  299. Func funcname[]= {__(_andthen,"%O,",A), _(currentbuffer,AS),
  300. __(keyseq_,"keyseq",KCA), {0,0,0,0,0,0}};
  301. Subr subrname[]= {_(_idle,I), _(accentedletters,I), _(alt0,I), _(alt1,I),
  302. _(alt2,I), _(alt3,I), _(alt4,I), _(alt5,I), _(alt6,I), _(alt7,I), _(alt8,I),
  303. _(alt9,I), _(altminus,I), _(backspace,I), _(beginmacro,ISK), _(bindkeybuf,IK),
  304. _(bindkeymacro,IK), _(bindkeysubr,ISK), __(buffer_,"buffer",ISK),
  305. _(buffermenu,I), _(calldos,IS), _(callsubr,IS), _(capitalize,I), _(casemode,I),
  306. _(cbrackets,I), _(cccmode,I), _(cchrstr,I), _(checkhelp,I), _(checkspelling,I),
  307. _(copybufmodes,IS), _(copydir,I), _(copykill,I), _(copytext,I), _(cstrchr,I),
  308. _(delblanklines,I), _(delbuf,I), __(delet,"delete",I), _(deletewhite,I),
  309. __(dis_play,"display",IS), _(displayhex,I), _(emptyappendix,I), _(endmacro,I),
  310. _(esc0,I), _(esc1,I), _(esc2,I), _(esc3,I), _(esc4,I), _(esc5,I), _(esc6,I),
  311. _(esc7,I), _(esc8,I), _(esc9,I), _(escminus,I), _(expandtabs,I), _(finalcr,I),
  312. _(findb,IM), _(findf,IM), _(findwordb,IS), _(findwordf,IS), _(finish,I),
  313. _(formatinsetregion,ISS), _(formatpara,I), _(formatregion,I), _(getappendix,I),
  314. _(godown,I), _(godownpart,I), _(goleft,I), _(goright,I), _(gotobof,I),
  315. _(gotobol,I), _(gotocol,I), _(gotodir,I), _(gotoeof,I), _(gotoeol,I),
  316. _(gotoline,I), _(gotonbuf,I), _(goup,I), _(gouppart,I), __(go_to,"goto",IL),
  317. _(help,IK), __(If,"if",IXA), _(incrfindb,I), _(incrfindf,I), _(insert,IS),
  318. _(insertfile,IS), _(insertspaces,I), _(kill_to_eol,I), _(killregion,I),
  319. _(killsent,I), _(killwordb,I), _(killwordf,I), _(leaveonewhite,I),
  320. _(linefeed,I), _(literalchar,I), _(longlinesmode,I), _(lwcaseregion,I),
  321. _(lwcasewords,I), _(macromenu,I), _(maketabs,I), _(markbof,I), _(markeof,I),
  322. _(menu,I), _(mergefile,IS), _(modemenu,I), _(mouse_mode,I), _(mouse_move,I),
  323. _(movetext,I), _(namemacro,ISK), _(newline,I), _(nextwindow,I), _(nofinalcr,I),
  324. _(nomove,IS), _(obey,IK), _(onewindow,I), _(openfile,IS), _(openline,I),
  325. _(overlay,IS), _(overlaymode,I), _(page_down,I), _(page_up,I), _(popmark,I),
  326. _(prbindings,I), _(prbuffers,I), _(prevwindow,I), _(prkeynames,I), _(prkeys,I),
  327. _(prmacro,I), _(prmacros,I), _(prsubrnames,I), _(pushmark,I), _(putappendix,I),
  328. _(readmacros,IS), _(refresh_display,I), _(remmark,I), _(renamebuffer,IS),
  329. _(repeat,I), _(repl,IMS), _(replask,IMS), _(replword,ISS), _(replwordask,ISS),
  330. _(replyank,I), _(restorebuf,I), _(savebuffer,I), _(setmark,I), _(setolddot,I),
  331. _(setrightmargin,I), _(setsortcol,I), _(showinfo,I), _(showregion,I),
  332. _(skipafterwordmode,I), _(skipparab,I), _(skipparaf,I), _(skipsentb,I),
  333. _(skipsentf,I), _(skipwordb,I), _(skipwordf,I), _(sortlines,I),
  334. _(splitwindow,IS), _(swopmark,I), _(tabmode,I), _(tabulate,I), _(times4,I),
  335. _(twiddle,I), _(twiddlelines,I), _(twiddlewords,I), _(twodmode,I),
  336. _(unbindkey,IK), _(upcaseregion,I), _(upcasewords,I), _(version,I), _(whoa,I),
  337. _(wrapmode,I), _(writebuffer,IS), _(yank,I), {0,0,0,0,0,0}};
  338. #undef _
  339.